package decorator_pattern.ex1;

/**
 * 简单的巨魔类，实现了Troll接口
 * @author 申书航
 * @version 1.0
 */
public class SimpleTroll implements Troll {

    private int attack; // 攻击力
    private int defense; // 防御力
    private int hp; // 血量
    private String name; // 名字

    /**
     * 构造函数，初始化简单巨魔的属性
     *
     * @param attack 攻击力
     * @param defense 防御力
     * @param hp 血量
     * @param name 名字
     */
    public SimpleTroll(int attack, int defense, int hp, String name) {
        this.attack = attack;
        this.defense = defense;
        this.hp = hp;
        this.name = name;
    }

    /**
     * 攻击目标巨魔并计算造成的伤害
     *
     * @param target 目标巨魔
     * @return 造成的伤害值
     */
    @Override
    public int attack(Troll target) {
        int damage = this.attack - target.getDefensePower();
        if (damage <= 0) {
            damage = 1;
        }
        target.hit(damage);
        return damage;
    }

    /**
     * 受到伤害，更新血量并输出状态
     *
     * @param damage 受到的伤害值
     */
    @Override
    public void hit(int damage) {
        this.hp -= damage;
        if (this.hp <= 0) {
            System.out.println(name + "已经死了");
        }
        else {
            System.out.println(name + "受到了" + damage + "点伤害，目前的血量为" + this.hp);
        }
    }

    /**
     * 获取当前的攻击力
     *
     * @return 当前攻击力
     */
    @Override
    public int getAttackPower() {
        return this.attack;
    }

    /**
     * 设置新的攻击力
     *
     * @param ap 新的攻击力
     */
    @Override
    public void setAttackPower(int ap) {
        this.attack = ap;
    }

    /**
     * 获取当前的防御力
     *
     * @return 当前防御力
     */
    @Override
    public int getDefensePower() {
        return this.defense;
    }

    /**
     * 设置新的防御力
     *
     * @param dp 新的防御力
     */
    @Override
    public void setDefensePower(int dp) {
         this.defense = dp;
    }

    /**
     * 获取当前的血量
     *
     * @return 当前血量
     */
    @Override
    public int getHp() {
        return this.hp;
    }
}
